package com.g7go.pft.api;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.g7go.pft.dto.*;
import com.g7go.pft.dto.base.Data;
import com.g7go.pft.soap.PFTMXStub;
import org.dom4j.DocumentException;

import java.rmi.RemoteException;

/**
 * @author lwc
 */
@SuppressWarnings("ALL")
public interface PFTApiService {

    /**
     * 产品列表（可选）
     * ac 账号 string Y
     * pw 密码 string Y
     * n 获取起始条数 string Y
     * m 获取结束条数 Y
     * n与m是整数差算，例子：n=0，m=100，代表从0条开始获取100条数据
     * @return
     */
    Data<GetScenicSpotListResult> getScenicSpotList(String source, PFTMXStub.Get_ScenicSpot_List condition) throws RemoteException, DocumentException, JsonProcessingException;

    /**
     * 产品详情（可选）
     * ac 账号 string Y
     * pw 密码 string Y
     * n 产品id string Y
     * @return
     */
    Data<GetScenicSpotInfoResult> getScenicSpotInfo(String source, PFTMXStub.Get_ScenicSpot_Info condition) throws RemoteException, DocumentException, JsonProcessingException;

    /**
     * 门票列表详情（可选）
     * ac 账号 string Y
     * pw 密码 string Y
     * n 产品id string Y
     * m 门票id Y
     * @return
     */
    Data<GetTicketListResult> getTicketList(String source, PFTMXStub.Get_Ticket_List condition) throws RemoteException, DocumentException, JsonProcessingException;

    /**
     * 场次信息（演出产品类型；可选）
     * ac	账号	string	Y
     * pw	密码	string	Y
     * aid	供应商id	string	Y
     * tid	门票id	string	Y
     * date	演出日期	string	Y	格式：Y-m-d
     * @return
     */
    Data<GetScreeningsListResult> getScreeningsList(String source, PFTMXStub.Get_Screenings_List condition) throws RemoteException, DocumentException, JsonProcessingException;

    /**
     * 日历价格库存（可选）
     * ac	账号	string	Y
     * pw	密码	string	Y
     * aid	供应商id	string	Y
     * pid	价格id	string	Y
     * start_date	查询价格开始日期	string	Y	格式：Y-m-d,结束日期不小于今日日期,开始日期与结束日期的最大跨度为31天
     * end_date	查询价格结束日期	string	Y	格式：Y-m-d
     * @return
     */
    Data<GetRealTimeStorageResult> getRealTimeStorage(String source, PFTMXStub.GetRealTimeStorage condition) throws RemoteException, DocumentException, JsonProcessingException;

    /**
     * 分时价格库存（可选）
     * ac	账号	string	Y
     * pw	密码	string	Y
     * aid	供应商id	string	Y
     * tid	门票id	string	Y
     * startDate	查询价格开始日期	string	Y	格式：Y-m-d,结束日期不小于今日日期,开始日期与结束日期的最大跨度为31天
     * endDate	查询价格结束日期	string	Y	格式：Y-m-d
     * @return
     */
    Data<TimeSharePriceAndStorageResult> timeSharePriceAndStorage(String source, PFTMXStub.Time_Share_Price_And_Storage condition) throws RemoteException, DocumentException, JsonProcessingException;

    /**
     * 身份证校验（仅校验身份证格式是否正确，无判断限购之类；可选）
     * ac	账号	string	Y
     * pw	密码	string	Y
     * personId	身份证id	string	Y
     * @return
     */
    Data<CheckPersonIDResult> checkPersonID(String source, PFTMXStub.Check_PersonID condition) throws RemoteException, DocumentException, JsonProcessingException;

    /**
     * 提交订单 （已支付订单提交，必接）
     * ac	账号	string	Y
     * pw	密码	string	Y
     * lid	产品id	string	Y	对应测试数据的景区id
     * tid	门票id	string	Y
     * remotenum	远端订单号	string	Y	贵方订单号,请确保唯一
     * tprice	结算价	string	Y	供应商配置的结算单价，单位：分
     * tnum	购买数量	string	Y
     * playtime	游玩日期	string	Y	格式：Y-m-d
     * 备注：为分时预约产品时，playtime格式为：Y-m-d hh:mm，
     * hh:mm 值为分时价格库存方法返回的start_time参数。
     * ordername	游客姓名	string	Y	多个用英文逗号隔开，不支持特殊符号：/|[]等
     * ordertel	游客手机号	string	Y
     * contactTEL	联系人手机号	string	Y
     * smsSend	是否选择票付通发送短信	string	Y	0-票付通发送短信（下单成功只返回双方订单号）
     * 1-票付通不发送短信（凭证信息一起返回）
     * <p>
     * paymode	支付方式	string	Y	0-账户余额，2-供应商授信额度，4-现场支付
     * ordermode	下单方式	string	Y	默认传输0-正常下单
     * assembly	集合地点	string	Y	线路时需要，参数必传，值可传输空
     * series	团号	string	Y	线路，演出时需要，参数必传，值可传输空；演出需要时传输格式：json_encode(array(int)场馆id,(int)场次id,(string)分区id));
     * concatID	联票id	string	Y	（未开放，请填0）
     * pCode	套票id	string	Y	（未开放，请填0）
     * m	供应商id	string	Y
     * personID	身份证号	string	Y
     * memo	备注	string	Y	参数必传，值可为空传输
     * callbackUrl	回调地址	string	Y	参数必传，值可为空传输,
     * @return
     */
    Data<PFTOrderSubmitResult> PFTOrderSubmit(String source, PFTMXStub.PFT_Order_Submit condition) throws RemoteException, DocumentException, JsonProcessingException;

    /**
     * 查询订单（可选）
     * ac	账号	string	Y
     * pw	密码	string	Y
     * pftOrdernum	票付通订单号	string	Y	可为空，为空时remoteOrdernum不能为空可为空
     * remoteOrdernum	远端订单号	string	Y	为空时pftOrdernum不能为空
     * @return
     */
    Data<OrderQueryResult> orderQuery(String source, PFTMXStub.OrderQuery condition) throws RemoteException, DocumentException, JsonProcessingException;

    /**
     * 修改/取消订单（必接）
     * ac	账号	string	Y
     * pw	密码	string	Y
     * ordern	票付通订单号	string	Y
     * num	剩余数量	string	Y	-1-订单数量不做修改，指要修改游玩人手机号
     * 0-取消订单
     * >0-订单剩余数量,参见FAQ第九点说明
     * ordertel	游玩人手机号	string	N
     * m	预留参数	string	N	可为空
     * @return
     */
    Data<OrderChangeProResult> orderChangePro(String source, PFTMXStub.Order_Change_Pro condition) throws RemoteException, DocumentException, JsonProcessingException;

    /**
     * 重发短信 （可选）
     * ac	账号	string	Y
     * pw	密码	string	Y
     * ordern	票付通订单号	string	Y
     * m	预留参数	string	N
     * @return
     */
    Data<ReSendSMSGlobalPLResult> reSendSMSGlobalPLResult(String source, PFTMXStub.ReSend_SMS_Global_PL condition) throws RemoteException, DocumentException, JsonProcessingException;

    /**
     * 查看凭证码/消费码 （可选）
     * ac	账号	string	Y
     * pw	密码	string	Y
     * ordern	票付通订单号	string	Y
     * m	预留参数	string	N
     * @return
     */
    Data<TerminalCodeVerifyResult> terminalCodeVerifyResult(String source, PFTMXStub.Terminal_Code_Verify condition) throws RemoteException, DocumentException, JsonProcessingException;

    /**
     * 会员关系查看 （可选）
     * ac	账号	string	Y
     * pw	密码	string	Y
     * n	查询类型	string	Y	1-查看我的分销商
     * 2-查看我的供应商
     * 3-查看我的员工
     * m	预留参数	string	N
     * @return
     */
    Data<PFTMemberRelationshipResult> PFTMemberRelationshipResult(String source, PFTMXStub.PFT_Member_Relationship condition) throws RemoteException, DocumentException, JsonProcessingException;

    /**
     * 资金余额查看（可选）
     * ac	账号	string	Y
     * pw	密码	string	Y
     * dtype	查询类型	string	Y	0-自己账户余额
     * 1-已用供应商授信额度
     * 2-供应商授信总额度
     * aid	供应商id	string	Y
     * @return
     */
    Data<PFTMemberFundResult> PFTMemberFundResult(String source, PFTMXStub.PFT_Member_Fund condition) throws RemoteException, DocumentException, JsonProcessingException;


}
